The present invention relates generally to systems and methods for providing web services, and more specifically to systems and methods for creating application calls to facilitate the testing of such web services.
For years now, the Internet and the World Wide Web (the “Web”) have been used to obtain and share information on any number of topics. Now, however, with the advent of the Extensible markup language (“XML”) and other dynamic Web protocols and applications, such as Java, it is now possible to share and provide applications and services on the Web. Such services are now being referred to as “web services.”
The web services movement is taking off because of the ease with which services can be offered and accessed. From a service provider's (e.g., electronic merchant's) point of view, if it can establish a web site, it can join the global marketplace. From a consumer's point of view, if you can type, you can access services provided by such a provider.
In the context of web services, the term “services” does not mean monolithic coarse-grained services like the retail services offered by Amazon.com™, but, rather, component services that others might use to build larger applications and thereby offer more robust services. Microsoft's™ Passport™, for instance, offers an authentication function exported to the Web. So hypothetically, an electronic newspaper like the New York Times™ can avoid creating its own user authentication service, instead incorporating the service provided by Passport™.
A more formal definition of a web service may be borrowed from IBM's™ tutorial on the topic:                “Web services are a new breed of Web application. They are self-contained, self-describing, modular applications that can be published, located, and invoked across the Web. Web services perform functions, which can be anything from simple requests to complicated business processes . . . Once a Web service is deployed, other applications (and other Web services) can discover and invoke the deployed service.”        
There are a number of companies and organizations active in developing web services applications. Examples of component services that are reusable building blocks include currency conversion, language translation, shipping, and claims processing, to name but a few.
As mentioned above, each of these web services can be used, either by the developing organization or a third party, either as standalone modules or to develop larger applications. This creates a problem, however, in that there currently exists no present facility for easily creating an application call in order to test a web service, whether developed in-house or acquired from an external developer. Because web services are designed for machine-to-machine communication, they are not particularly amenable to traditional methods of application testing.
For example, if a developer wants to test the functionality or performance of a web service under a certain set of conditions (e.g., processing a certain data set and/or operating under a certain load), that developer first must either develop a full-blown user interface for the web service (which is costly and time-consuming) or must develop an interim testing interface for the web service (which is usable only for that purpose and therefore unnecessarily wastes time that could be,spent developing the web service itself). Moreover, using either of these methods, testing usually is a labor-intensive, manual process involving much iteration, especially when performing regression testing, testing the output of a particular service in response to a variety of data sets or evaluating the performance of a particular web service in a production environment.
What is needed, therefore, is a tool for facilitating the automatic testing of a web service. Ideally, such a tool should provide a prefabricated interface allowing a user quickly to create application calls for a variety of web services, ranging from relatively simple objects (for instance, where the web service requires entry of only a single parameter) to relatively complex objects (for instance, where the web service contains a complex object comprising nested arrays or recursive functions).